#include <stdio.h>

#define TOTAL_NUM_ASCII 128
#define FILE_NAME_STORE "test_01_test.txt"

int main(int argc, char const *argv[])
{
    if(argc != 2)
    {
        printf( "Pls input: ./a.out <src file name>\n" );
        return -1;
    }

    FILE * fpSrc = fopen( argv[1], "r" );
    if( NULL == fpSrc)
    {
        perror( "fail to open file" );
        return -1;
    }

    int charCounter[TOTAL_NUM_ASCII]={0};
    int iRead=0;

    while ( ( iRead = fgetc( fpSrc ) ) != EOF)
    {
            ++charCounter[iRead];
    }

    fclose( fpSrc );

    FILE * fpStore = fopen( FILE_NAME_STORE, "w+" );

    int i=0;
    int iTotalChar=0;
    for( i = 0; i < TOTAL_NUM_ASCII; ++i )
    {
        if( charCounter[i] > 0 )
        {
            fprintf( fpStore, "Num of ASCII %c (%d) is %d \n", i, i, charCounter[i] );
            iTotalChar += charCounter[i];
        }
    }
    fprintf( fpStore,"Total Num of ASCII is %d\n", iTotalChar );

    fclose( fpStore );

    return 0;
}

/*
如果所统计的文件中包含中文, 将会产生错误
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)
*/

/***********************************************************************************
作业要求：
从终端输入一个文件名,统计该文件中所有出现英文字符的个数
例如： ./a.out	/usr/include/stdio.h 
		
        int cnt[256];
		cnt[0]  ====>0
		cnt[1]  ====>1
*/

/*
编程思路：
1）查询ASCII表， 确认总字符个数128个，ASCII值[0,127]
2）建立一个长度为128的字符型数组， 每个数组元素，数组下标为ASCII码值，数字元素的值保存字符的个数。
3）将统计好的数组按照合理的格式保存到一个文本文件中

所使用的主要标准库函数：
fgetc    --- 逐个从文件中读取字符， 直到EOF
fprintf  --- 将数组按照合理的格式保存到另外一个文本文件中

注意： 
1）这种方法只能统计纯ASCII文本文件，不能统计带中文的文本文件
2）如果要统计中文，需要按照Unicode编码方式统计。
***********************************************************************************/